RAIS  3.2
C:/Projekte/RAIS/FillCustomQueryTableCL/PreselectionListQuery.cs
Go to the documentation of this file.
00001 using System;
00002 using System.Collections.Generic;
00003 using System.Linq;
00004 using System.Text;
00005 using System.Data;
00006 using System.Data.SqlClient;
00007 namespace FillCustomQueryTableCL
00008 {
00009     public class PreselectionListQuery : Query
00010     {
00011         private List<string> correctParameters = new List<string>();
00012         private static string QueryTypeName = "Preselection List";
00013         private readonly string GetParametersQuery =
00014             "SELECT " +
00015             "    0 FromMask, " +
00016             "    [Dynamic Mask Filter].[Dynamic Mask Filter Name] [Name], " +
00017             "    [Dynamic Mask Filter].[Order], " +
00018             "    min([Dynamic Mask Filter].[Query Name]) RelatedQuery, " +
00019             "    min([Dynamic Mask Filter].[FK Table ID]) RelatedTable, " +
00020             "    max([Dynamic Mask Filter].[Visible On Form]) [Visible On Form] " +
00021             "FROM [Dynamic Mask Filter] " +
00022             "    LEFT JOIN [Dynamic Mask] on [PK Dynamic Mask ID]=[FK Dynamic Mask ID] " +
00023             "    LEFT JOIN [Dynamic Mask Type] on [PK Dynamic Mask Type ID]=[FK Dynamic Mask Type ID] " +
00024             "WHERE [Dynamic Mask].[Query Name]='{0}' and [Use In Query]=1 " +
00025             "GROUP BY [Dynamic Mask Filter].[Dynamic Mask Filter Name], [Dynamic Mask Filter].[Order] " +
00026             "UNION " +
00027             "SELECT " +
00028             "    1 FromSys, sys.parameters.name [Name], sys.parameters.parameter_id, " +
00029             "    sys.types.name TypeName, null, null " +
00030             "FROM sys.parameters  " +
00031             "    LEFT JOIN sys.objects on sys.parameters.object_id=sys.objects.object_id  " +
00032             "    LEFT JOIN sys.types ON sys.parameters.user_type_id=sys.types.user_type_id  " +
00033             "WHERE sys.objects.name='{0}' " +
00034             "ORDER BY FromMask, [Dynamic Mask Filter].[Order] ";
00035 
00036         public PreselectionListQuery(string name)
00037             : base(name, QueryTypeName)
00038         {
00039             LoadParameters(GetParametersQuery);
00040         }
00041 
00042         public PreselectionListQuery(string name, string queryTypeName, string getParametersQuery)
00043             : base(name, queryTypeName)
00044         {
00045             LoadParameters(getParametersQuery);
00046         }
00047 
00048         private void LoadParameters(string getParametersQuery)
00049         {
00050 
00051             using (SqlCommand sqlCommand = new SqlCommand("", sqlConnection))
00052             {
00053                 sqlCommand.CommandText = string.Format(getParametersQuery, Name);
00054                 int order = 0;
00055                 using (SqlDataReader reader = sqlCommand.ExecuteReader())
00056                 {
00057                     Dictionary<int, string[]> fromMask = new Dictionary<int, string[]>();
00058                     Dictionary<int, string[]> fromSys = new Dictionary<int, string[]>();
00059                     
00060                     while (reader.Read())
00061                     {
00062                         if ((int)reader["FromMask"] == 0)
00063                         {
00064                             PreСorrectParameters(reader);
00065                             string tabId;
00066                             string relQuery;
00067                             order++;
00068                             if (reader["RelatedTable"] != DBNull.Value) tabId = reader["RelatedTable"].ToString();
00069                             else tabId = "-1";
00070                             if (reader["RelatedQuery"] != DBNull.Value ) relQuery = reader["RelatedQuery"].ToString();
00071                             else relQuery = "";
00072 
00073                             fromMask[order] = new string[3] { (string)reader["Name"], relQuery, tabId };
00074                         }
00075                         else fromSys[(int)reader["Order"]] = new string[2] { (string)reader["Name"], (string)reader["RelatedQuery"] };
00076                     }
00077                     order = 1;
00078                     string type;
00079                     if (fromMask.Count == 0)
00080                     {
00081                         this.Type = QueryTypes["Other"];
00082                         for (int i = 1; i <= fromSys.Count; i++ )
00083                             Parameters.Add(new Parameter(Name, fromSys[i][0].Substring(1), fromSys[i][0].Substring(1), GetTypeFromSQLType(fromSys[i][1]), -1, "", i));
00084                     }
00085                     else
00086                     {
00087                         for (int i = 1; i <= fromMask.Count; i++)
00088                         {
00089                             string relQuery = fromMask[i][1];
00090                             int tabId = int.Parse(fromMask[i][2]);
00091                             string querName = fromMask[i][0];
00092 
00093                             if (querName == "DatesRange")
00094                             {
00095                                 type = "DatesRangeStartDate";
00096                                 querName = "StartDate";
00097                             }
00098                             else if (querName == "User")
00099                                 type = "UserID";
00100                             else if (relQuery != "")
00101                                 type = "LookupFromQuery";
00102                             else if (tabId != -1)
00103                                 type = "LookupFromTable";
00104                             else type = GetTypeFromSQLType(fromSys[order][1]);
00105                             
00106                             Parameters.Add(new Parameter(Name, fromSys[order][0].Substring(1), querName, type, tabId, relQuery, order));
00107                             order++;
00108                             if (type == "DatesRangeStartDate")
00109                             {
00110                                 querName = "EndDate";
00111                                 type = "DatesRangeEndDate";
00112                                 Parameters.Add(new Parameter(Name, fromSys[order][0].Substring(1), querName, type, tabId, relQuery, order));
00113                                 order++;
00114                             }
00115                         }
00116                     }
00117                     СorrectParameters();
00118                 }
00119             }
00120         }
00121 
00122         protected override void PreСorrectParameters(System.Data.SqlClient.SqlDataReader reader)
00123         {
00124             if ((int)reader["FromMask"] == 0 && reader["Visible On Form"].ToString() == "0")
00125                 correctParameters.Add(((string)reader["Name"]).ToLower().Trim());
00126         }
00127         protected override void СorrectParameters()
00128         {
00129             foreach (Parameter par in Parameters)
00130             {
00131                 if (par.VisibleName.ToLower().Trim() == "facility" && correctParameters.Contains("facility"))
00132                     par.TypeName = "PreselectedFacility";
00133                 else if (par.VisibleName.ToLower().Trim() == "department" && correctParameters.Contains("department"))
00134                     par.TypeName = "PreselectedDepartment";
00135             }
00136         }
00137     }
00138 }